import axios from 'axios'
import store from '../store/index'
import {
  encryptAes,
  decryptAes
} from '@/common/CryptoAes'
import {
  Message,
  Notification,
} from 'element-ui';
/**
 * 环境切换
 */
if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = '' //测试环境地质’
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = '' // 生产环境地址 如/api/
}
/**
 * 加密设置
 */
var key = '1234567812345678';
var iv = '1234567812345678'
/**
 * 请求前拦截，对数据进行加密
 */
// axios.defaults.baseURL = '/api'
axios.defaults.timeout = 1000000 //设置接口超时时间
axios.defaults.headers.post['Content-Type'] = 'application/json'
let loading = null
axios.interceptors.request.use(
  config => {
    let token = localStorage.getItem("token");
    if (token) {
      config.headers['x-auth-token'] = token;
    }
    let data = config.data || {}
    config.data = encryptAes(key, iv, data);
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
/*
 *请求响应拦截
 *用于处理数据返回后的操作，对数据解密
 */
axios.interceptors.response.use(
  response => {
    let {
      data
    } = response
    let result = decryptAes(key, iv, data)
    if (response.status === 200) {
      if(result.respCo==="9996"){
        store.commit("setLoginStatus",true);
        store.commit("loginOut");
      }
      if(result.respCo==="9998"){
        store.commit("setLoginTimeOut",true);
        store.commit("loginOut");
      }
      response.data = result;
      return response
    }
  },
  error => {
    //断网处理或者请求超时
    if (loading) {
      loading.close()
    }
    console.log(error)
    if (!error.response) {
      
      //请求超时
      if (error.message.includes('timeout')) {
        Message.error('请求超时了,请稍后重试')

      } else {
        //断网，可以展示断网组件
        Message.error('请检查网络连接是否正常')

      }
      return
    }
    const status = error.response.status
    switch (status) {
      case 500:
        Message.error('服务器内部错误')
        break;
      case 404:
        Message.error('未找到远程服务器')
        break;
      case 401:
        // Message.error("warning", "用户登陆过期，请重新登陆");
        // localStorage.removeItem("token");
        setTimeout(() => {
          router.replace({
            path: '/',
            query: {
              redirect: router.currentRoute.fullPath
            }
          })
        }, 1000)
        break;
      case 400:
        Message.error("数据异常");
        break
      default:
        Message.error(error.response.data.message);
    }
    return Promise.reject(error)
  }
)
/*
9996 -> 账户在其他地方登录
9997 -> 需要登录鉴权
 */


/**
 * get方法
 * @params {string} url请求参数
 * @params {object} params请求参数
 */
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, params).then(res => {
      resolve(res)
    }).catch(res => {
      reject(res)
    })
  })
}
/***
 * post方法
 * @params {string} url请求参数
 * @params {object} params请求参数
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params).then(res => {
      resolve(res)
    }).catch(res => {
      reject(res)
    })
  })
}
